#include "analisador.h"

imprime_tipos(tipo lista_tipos){

	type aux;

	aux = lista_tipos->prim;

	printf("\nLista de variaveis:\n");

	while(aux != NULL){
		printf("\ntipo: %s\n",aux->tipo);
		printf("nome: %s\n",aux->id);
		printf("valor: %s\n",aux->valor);
		//printf("valor: %s\n",lista_tipos[i]->valor);
		aux = aux->prox;
	}

}

//**********************************************************************//
//****************************MAIN**************************************//


int main(int argc, char *argv[])
{  
    char *token;
    char *token_ant;
		char *aux_token;
		char *nome_var_ant;
		tipo lista_tipos;
    int i;
		int retorno_semant;
    FILE *arquivo;       
    FILE *saida;

		lista_tipos = (tipo)calloc(1,sizeof(struct tipo));
		nome_var_ant = (char *) calloc (1,sizeof(char)*30);

		lista_tipos->prim = NULL;
    i = 0;
		retorno_semant = 0;

		aux_token = (char *) calloc (1,sizeof(char)*NUMCHARS);
    token_ant = (char *) calloc (1,sizeof(char)*NUMCHARS);
        
    //arquivo de entrada
    arquivo = fopen(argv[1],"r");
    if (arquivo==NULL) 
        perror ("Erro ao abrir o arquivo");
        
    else
    {
		token = "";
       //passando o arquivo para as funcoes analisadoras lexica e semantica

        while (!feof(arquivo))
        {
            strcpy(token_ant,token);
            token = lexico(arquivo);

						if (retorno_semant == SIMBOLO)
							if (define_se_var_ou_func(token,nome_var_ant,lista_tipos))
							{
								retorno_semant = 0;
								continue;
							}

	            if (strcmp(token,"NULL") != 0) //token gerado
  	          {
									fprintf(stderr,"%s\n",token);
									strcpy(aux_token,token);

					        retorno_semant = semantico(token,token_ant,nome_var_ant,lista_tipos,arquivo);

									if(retorno_semant == ERRO)
  	              {
				              printf("Erro semantico com o token %s\n",aux_token);
									    imprime_tipos(lista_tipos);
  	                  return;
									}
  	          }
				}
				imprime_tipos(lista_tipos);
    }
}



